메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

FAT 파일시스템(1) - 소개

한빛미디어

|

2006-05-15

|

by HANBIT

24,569

제공: 한빛미디어 네트워크 기사

저자: 정준석
출처: IT EXPERT, 임베디드 개발자를 위한 파일시스템의 원리와 실습 Chapter 3. 중에서



본격적으로 FAT 파일시스템의 구조를 분석하기 전에 FAT 파일시스템을 전반적으로 살펴보자. 이 절에서는 FAT 파일시스템의 역사와 특징을 살펴보고 윈도우는 FAT 파일시스템을 어떻게 이용하고 있는지 살펴볼 것이다.

FAT 파일시스템은 그 역사가 길며, 긴 역사 동안 여러 번의 변화가 있었다. 이번 절에서는FAT 파일시스템의 변천사에 대해 살펴보자. 이런 변화의 과정에 대해 살펴보면 FAT 파일시스템을 이해하는 데 좀 더 도움이 될 것이다.



[그림 3-1] FAT 파일시스템의 변화 과정

FAT 파일시스템의 탄생

FAT 파일시스템은 1976년에 Microsoft의 빌 게이츠에 의해 최초로 구현되었다. 빌 게이츠가 FAT 파일시스템을 구현하게 된 목적은 자신의 회사 제품인 BASIC에서 플로피디스크를 관리하는 데 이용하기 위해서였다. 이것이 FAT 파일시스템의 최초 버전인 FAT12의 시작이다. 하지만 Microsoft의 BASIC은 운영체제가 아닌 프로그래밍 언어였기 때문에 FAT12는 널리 쓰이지 않았고 단지 BASIC의 한 기능이었을 뿐이었다.

이런 FAT 파일시스템이 정작 PC 환경에서 널리 쓰이게 된 계기는 Tim Paterson이라는 사람이QDOS라는 운영체제를 개발하면서QDOS가 이용할 파일시스템으로FAT 파일시스템을 선택했기 때문이다. 그는 당시 존재하던 여러 파일시스템을 비교한 끝에 FAT 파일시스템을 선택했는데 그 이유는 FAT 파일시스템이 매우 단순한 구조를 가지고 있었기 때문이었다.

Tim Paterson이 보기에 FAT 파일시스템은 플로피디스크를 관리하기에 매우 적절해 보였고 조금만 수정한다면 32MB 이상도 관리할 수 있을 것이라고 생각했다. 그는 32MB 정도면 PC 환경에서는 절대로 충분한 용량이라고 믿었다.

--------------------------------------------------------------------------------
▒ 여기서 잠깐 ▒
컴퓨터 역사상 이런 착각을 하는 일화가 몇 가지가 더 있다. IBM은 개인용 컴퓨터의 성능은 16bit CPU 컴퓨터면 충분하다고 판단하는 바람에 최초 32bit CPU 컴퓨터 출시를 컴팩(Compaq)에게 빼앗겼고, Microsoft는 개인용 컴퓨터의 메모리 크기는 640KB면 충분하다고 판단하는 바람에 MS-DOS를 사용했던 많은 유저들을 고통으로 몰아넣었다.
--------------------------------------------------------------------------------

1980년 QDOS가 세상에 발표됨과 동시에 FAT 파일시스템도 같이 소개된다. 이것이 FAT 파일시스템의 공식적인 시작이다. 이후QDOS는 여러 이유에 의해 창조자의 손을 떠나 IBM과 Microsoft로 넘어가게 된다. IBM과 Microsoft는 QDOS의 이름을 각각 PC-DOS와 MS-DOS로 바꾸고 x86 PC의 운영체제로 탑재시켰다. IBM x86 PC가 엄청난 성공을 거두며 PC 시장의 표준처럼 자리 잡게 되고 다른 PC 메이커들도 IBM 호환 기종을 만들어내자 x86 PC의 운영체제인MS-DOS도 대중적인 운영체제가 된다. 이렇게IBM 호환PC의성공을 등에 업고 FAT 파일시스템은 자연스럽게 PC에서 가장 많이 쓰이는 파일시스템으로 자리를 잡게된다.

FAT12

1980년에 나온FAT 파일시스템의 최초 버전은 다른 버전들과 구분하기 위해FAT12라고 불린다. FAT12는 플로피디스크에 파일을 저장하기 위해 개발되었다. 당시의PC는HDD가 없고 5.25인치 플로피디스크가 대세였던 시기였으므로 당연한 것이었다. 최초로 발표된 FAT12는 구조가 매우 단순해서 디렉토리(directory)라는 개념도 없었다. 1983년MS-DOS 2.0이 나오고 나서 FAT12에 계층형 디렉토리가 지원되게 되고, 현재 FAT 파일시스템의 기본구조를 거의 갖추게된다. 1984년에 발표된MS-DOS 3.0에서는 FAT12를 이용해서 IBM PC-AT에서HDD를 사용할 수 있게 했고, 5.25인치 1.2M 양면 플로피디스크를 사용할 수 있도록 했다.

FAT16

HDD 기술의 발달로 개인용 컴퓨터에 HDD를 장착하는 경우가 점점 많아지자, HDD에서 사용할 파일시스템의 필요성이 증가하게 된다. Microsoft는 시장의 요구에 따라 1988년에 MS-DOS 4.0을 통해서 FAT12의 다음 버전인 FAT16을 발표한다. FAT 파일시스템은 FAT16으로 확장되어서야 비로소 HDD에 사용할만한 파일시스템이 된다. 구조적으로 FAT16은 FAT12와 거의 동일하며 단지 FAT16에서는 클러스터(Cluster)를 표현하는 비트수가 12개에서 16개로 늘어난 덕에 이론적으로 최대 216인 65,535개의 클러스터를 표현할 수 있게 되었다는 정도가 차이점이다. 이는 클러스터 크기를 32KB로 할 경우 2GB까지 표현할 수 있으며 이 정도면 그 당시로서는 평생 써도 남을 정도로 충분한 용량 표현이었다.

Microsoft는 다른 여러FAT 문제점(예를 들어 파일명 길이 제한 문제)은 그렇다 치더라도 용량 표현 한계 때문에 더 이상 고민하지 않아도 된다는 기쁨에 사로잡혔을 것이다.

VFAT(Virtual FAT)

1995년 Microsoft는 자사의 차세대 운영체제인 Windows 95에FAT 파일시스템을 탑재하면서 그 성능이나 기능을 향상시켰다. 정확하게 따지자면 이런 FAT의 향상 버전을 VFAT 또는 FAST FAT라고 불러야 맞지만 많은 사람들은 똑같이 FAT 파일시스템이라고 부른다.

VFAT 파일시스템으로 향상되면서 변경된 내용을 살펴보면 우선 32bit 보호 모드(Protected Mode)에 적합하게 코드를 재작성하여 성능을 향상시켰고, 독점 모드(Exclusive Mode)를 추가하여 동시에 여러 프로그램이 같은 파일을 접근할 경우에 대비하였다. 하지만 이런 것들은 파일시스템의 구조 변화라기보다는 운영체제의 파일시스템 처리 성능이 개선된 것이다.

이런 것보다 우리가 주목해야 할 가장 중요한 변화는FAT가 VFAT로 확장되면서 LFNs(Long File Names)를 지원한다는 것이다. 기존의 FAT 파일시스템은 파일명이 최대 8Byte, 확장명은 최대 3Byte가 고작이었다(이것을 8.3 File Naming이라고 한다). 게다가 파일명과 확장명 모두 대문자만 가능하도록 설계되어 있었다. Microsoft는 이러한 단점을 개선하기 위해서 LFNs를 고안했다. LFNs 방식은 최대 255자까지 파일명을 적을 수 있으며 LFNs를 지원하지 않는 이전 버전의DOS와도 하위 호환성을 가진다. 이런 LFNs 기능이 추가된VFAT 파일시스템이 최초로 Windows 95에 적용된 덕분에 Windows 95는 파일명의 길이 제한으로부터 자유로울 수 있게 되었다.

LFNs 덕분에 파일명의 길이가 255자까지 늘어났다고는 하지만 VFAT로 향상된 FAT16 파일시스템의 최대 용량은 여전히2GB 정도밖에는 되지 않았다. 이 시기에는 이미 용량이 2GB가 넘는 HDD들이 출시되고 있었으므로 Microsoft는다시한번FAT 파일시스템의 용량 표현 문제 때문에 고민에 빠지게 된다.

FAT32

Windows 95 사용자가 2GB가 넘는 하드디스크를 사용하고자 한다면 FAT16의 용량 표현 한계때문에어쩔수없이파티션을나눠서사용하는불편을감수해야만했다. 때문에 Microsoft는 1996년에 Windows 95 OSR2를 발표하면서 FAT32를 선보인다. FAT32는 VFAT를 기반으로 수정하였으며 클러스터를 표현하는 bit를 32개로 늘렸다. 하지만 32bit 중 최상위 4bit는 예약 영역으로 사용되지 않으므로 총 28bit를 이용해서 클러스터를 표현한다. 이는 클러스터 크기를 16KB로 한다면 이론상 최대 4TB까지 가능한 용량이다. 실제로도 Windows는 FAT32를 2TB까지 인식할 수 있지만 여러 이유 때문에 FAT32의 최대 용량을 32GB로 제한하고 있다. 다만 약간의 제약 아래 다른 장치가 포맷을 한 32GB 이상의 FAT32 볼륨을 인식한다. 만약 Windows에서 용량이 32GB 이상 되는 저장장치를 포맷한 후 사용하고 싶다면 파티션을 분할하든지FAT32를 포기하고NTFS로 사용해야 한다.

FAT32는 FAT 파일시스템의 마지막 버전이 될 것이다. Microsoft는 FAT32를 마지막으로 더 이상FAT 파일시스템의 다음 버전은 없을 거라고 말한다. Microsoft는 낡고, 그다지 성능이 좋지 않은 FAT 파일시스템 대신 NTFS에 주력하고 있다. FAT 파일시스템은 오랫동안 차지했던 영광의 자리를NTFS에게 넘겨주고 있는 것이다.

FAT 파일시스템들의 비교

앞에서 살펴보았듯이 FAT 파일시스템은20년 넘게 사용되어오면서 FAT12, FAT16, FAT32 순으로 계속 버전이 향상되어 왔다. 각각의FAT 파일시스템들은 그 구조가 매우 비슷하지만, 엄연히 다른 파일시스템이다. 각각의 FAT 파일시스템을 비교해 보면서 특징을 살펴보자. 이런 특징들을 살펴봄으로써 위에서 배운 내용들을 정리할 수 있고 각각의 파일시스템의 차이점에 대해 좀 더 명확히 할 수 있다.



[표 3-1] FAT 파일시스템 비교

--------------------------------------------------------------------------------
▒ 여기서 잠깐 ▒
위 표 중에서 각각의 FAT 파일시스템의 최대 클러스터 개수가 논란이 될 수 있다. 이론상 FAT12의 최대 클러스터 개수는 4,096개이며, FAT16은 65,535개이다. 많은 문서들이 최대 클러스터 개수에 대해 이론상의 개수로 표시하고 있어서 더욱 혼란스러운데, Microsoft에서 발표한 정식 문서에는 최대 클러스터 개수를 위 표와 같이 표시하고 있다.
--------------------------------------------------------------------------------

FAT12, FAT16, FAT32 파일시스템간의 가장 큰 차이점은 클러스터 표현 비트 수의 차이에 따른 최대 클러스터 개수가 다르다는 점이다. 표현 가능한 클러스터의 개수가 많아질수록 더많은 용량을 표현할 수 있으므로FAT32가 가장 큰 용량을 표현할 수 있다. 그 외에 살펴볼 특징으로는 루트 디렉토리의 파일 개수 제한이다. FAT12와FAT16의 경우 루트 디렉토리의 파일 개수에 제한을 두고 있는 반면 FAT32는 루트 디렉토리의 경우라도 일반 디렉토리와 동일하게 디렉토리 내 최대 파일 개수까지 저장이 가능하다.

FAT 파일시스템의 호환성

각각의 파일시스템들의 호환성에 대해 살펴보자. 어떤 파일시스템을 구현할 것인지를 선택하는 데에는 성능만큼이나 호환성도 생각해 봐야 한다. 그래야 좀 더 많은 사용자들을 확보할 수 있기 때문이다.



[표 3-2] 파일시스템과 Windows와의 호환 여부

위표는Windows가 지원하는 파일시스템을 나타낸 것이다. 가장 호환성이 좋은 파일시스템은 DOS를 포함한 모든 윈도우가 지원하는 FAT12와 FAT16 파일시스템이다. FAT12는 플로피디스크용이므로 고려대상에서 제외한다면 FAT16이 가장 호환성이 좋은 파일시스템이 된다. FAT16 파일시스템을 구현하면 운영체제에 구애받지 않아도 되는 장점이 있다. 하지만 FAT16은 용량 표현이 작다는 단점이 있다. 용량이 2GB를 넘는 파티션을 FAT16으로 포맷해서 사용한다는 것은 조금 무리가 있다. NTFS는 성능이나 여러 면에서 가장 좋은 파일시스템이긴 하지만 호환성이 낮다.

그러므로 지금까지 살펴본 내용을 정리해서 생각해 봤을 때FAT 파일시스템 중에서는 FAT32가 가장 무난한 선택일 듯하다. FAT16에 비해서 최대 표현 용량도 큰 편이며, 루트 디렉토리의 파일개수제한도없다. 하지만 FAT32 도 몇가지 제약이 있다. FAT32는MS-DOS, Windows 95와는 호환되지 않는다. 또한 나중에 살펴보겠지만 FAT32를 사용하려면 저장장치의 용량이 최소한32MB 이상은 되어야 한다. 용량이32MB 이하인CF 카드나 USB Memory Stick에 FAT 파일시스템을 사용하려면 FAT16 외에는 방법이 없다.

클러스터 크기와 슬랙(Slack) 문제

여기에서는 클러스터 크기와 볼륨 크기와는 어떤 관계가 있는지, 그리고 클러스터 크기에 따른 장단점은 무엇인지에 대해서 살펴보자. 이런 내용을 살펴봄으로써 좀 더 효율적인 파일시스템을 구현하는 데 도움이 된다.



[표 3-3] Windows 기준의 클러스터 크기

(1) NT, 2000, XP에서 클러스터 크기를 64KB로 해서 2~4GB의 볼륨을 FAT16으로 포맷할 수 있다. 하지만 일부 응용 프로그램에서는 64KB 클러스터 볼륨을 인식하지 못하는 경우가 있으므로 호환성을 생각한다면 2GB가 넘는 볼륨은 FAT16이 아닌 다른 파일시스템을 사용하기를 권장한다.
(2) Windows는 32GB가 넘는 볼륨에 FAT32를 이용해서 포맷하는 것을 지원하지 않는다. 하지만 다른 장치가 포맷한 32GB가 넘는 FAT32 볼륨은 인식할 수 있다.

--------------------------------------------------------------------------------
▒ 여기서 잠깐 ▒
위 표에 나온 볼륨 용량에 따른 클러스터 크기는 Windows 2000을 기준으로 작성되었다. 다른 버전의 Windows에서는 위의 기준과 다를 수 있다.
--------------------------------------------------------------------------------

위의 표는 Windows가 볼륨 용량에 따라 할당하는 클러스터의 크기 변화를 보여준다. 여러분들이 FAT 파일시스템을 구현할 때에는 위의 규칙에 따라 클러스터 크기를 Windows와 똑같이 맞추지 않아도 되지만, Windows의 규칙대로 구현하는 것이 호환성을 높이는 데 도움이 된다. 만약 여러분이 위 표에서‘지원 안 함’이라고 써있는 부분에 해당하는 영역을 설계했다면(예를 들어 FAT16을 이용해서 클러스터의 크기를 128KB로 잡아서 4~8GB의 볼륨을 사용하도록 설계했다면) Windows가 친절하게 여러분이 만든 FAT 파일시스템을 인식해 주길 바라는 건 곤란하다.

클러스터 크기가 크거나 작음에 따라서 장단점이 있다. 우선 클러스터의 크기가 작은 경우의 장점은 클러스터 할당 때문에 버려지는 용량이 적다는 것이고, 단점은FAT 영역의 크기가 커진다는 것이다.

반면에 클러스터의 크기가 큰 경우의 장점은 FAT 영역의 크기가 작다는 점과 클러스터의 크기가 작은 경우에 비해 파일당 할당하는 클러스터 수가 적기 때문에 그에 따른 작업의 오버헤드(overhead)가 적다는 점이다. 단점은 크기가 작은 파일이 많은 경우 버려지는 용량이 많아진다는 점이다. 이렇게 버려지는 부분을 슬랙(slack)이라고 한다.

아래 표는 위에서 설명한 클러스터 크기에 대한 장단점을 요약한 것이다.



[표 3-4] 클러스터 크기에 따른 장단점

그래도 굳이 클러스터 크기는 작은 것이 좋은지 큰 것이 좋은지를 따져보자면, 클러스터 크기는 작은 것이 낫다. 클러스터를 크게 사용함으로써 버려지게 되는 용량이 꽤나 많기 때문이다.

예를 들어 4GB 용량의 파티션을 FAT16으로 포맷했다고 한다면 Windows는 클러스터 크기를 무려 64KB로 할당할 것이다. 이 파티션에 사용자가 1Byte 용량밖에 안 되는 파일을 10개 저장했다고 가정한다면 무조건 한 클러스터에는 한 파일만을 담아야 하므로 10개의 클러스터를 사용해야 한다. 64KB X 10개 = 640KB가 되는데, 총 용량이 겨우 10Byte밖에 안 되는 파일 10개를 저장하기 위해서 639KB를 버리는 것은 너무나도 아까운 일이다. 때문에 클러스터 크기가 작은 편이 용량을 효율적으로 사용하는 데 더 좋은 방법이며, NTFS 파일시스템에서는 이러한 사실 때문에 클러스터 할당 크기를 작게 해놓았다. 단, 영상 데이터만을 저장한다거나 대용량 파일만을 저장한다면 굳이 클러스터를 작게 할 필요는 없다.
TAG :
댓글 입력
자료실

최근 본 책0